Warning: package ‘rvest’ was built under R version 4.1.2
Warning: package ‘syuzhet’ was built under R version 4.1.2
Warning: package ‘sentimentr’ was built under R version 4.1.2
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     

Attaching package: ‘sentimentr’

The following object is masked from ‘package:syuzhet’:

    get_sentences

Warning: package ‘gplots’ was built under R version 4.1.2

Attaching package: ‘gplots’

The following object is masked from ‘package:stats’:

    lowess

Warning: package ‘tm’ was built under R version 4.1.2
Loading required package: NLP
Warning: package ‘NLP’ was built under R version 4.1.1
Warning: package ‘factoextra’ was built under R version 4.1.2
Loading required package: ggplot2

Attaching package: ‘ggplot2’

The following object is masked from ‘package:NLP’:

    annotate

Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
Warning: package ‘beeswarm’ was built under R version 4.1.1

Attaching package: ‘scales’

The following object is masked from ‘package:syuzhet’:

    rescale

Warning: package ‘RANN’ was built under R version 4.1.2
Warning: package ‘topicmodels’ was built under R version 4.1.2

Text mining

A tenant at will, who possesses land sufficient to maintain his family for little more than a quit rent, is as dependent upon the proprietor as any servant or retainer whatever, and must obey him with as little reserve. Such a proprietor, as he feeds his servants and retainers at his own house, so he feeds his tenants at their houses. The subsistence of both is derived from his bounty, and its continuance depends upon his good pleasure.

Text basic processing

Adapted from https://eight2late.wordpress.com/2015/09/29/a-gentle-introduction-to-topic-modeling-using-r/.

[1] "Sample sentence:"
Prison Reform: for the benefit of the working class. This is the last word and the only seriously meant word of bourgeois Socialism. It is summed up in the phrase: the bourgeois is a bourgeois for the benefit of the working class.
[1] "After converting to lower case:"
prison reform: for the benefit of the working class. this is the last word and the only seriously meant word of bourgeois socialism. it is summed up in the phrase: the bourgeois is a bourgeois for the benefit of the working class.
[1] "After removing punctuation:"
prison reform for the benefit of the working class this is the last word and the only seriously meant word of bourgeois socialism it is summed up in the phrase the bourgeois is a bourgeois for the benefit of the working class
[1] "After removing numbers:"
prison reform for the benefit of the working class this is the last word and the only seriously meant word of bourgeois socialism it is summed up in the phrase the bourgeois is a bourgeois for the benefit of the working class
[1] "After removing stopwords:"
prison reform   benefit   working class    last word    seriously meant word  bourgeois socialism   summed    phrase  bourgeois   bourgeois   benefit   working class
[1] "After removing whitespace:"
prison reform benefit working class last word seriously meant word bourgeois socialism summed phrase bourgeois bourgeois benefit working class
[1] "After stemming:"
prison reform benefit work class last word serious meant word bourgeoi social sum phrase bourgeoi bourgeoi benefit work class

Topic modeling

Generate document-term matrices.

Run LDA

Warning: file ‘LDAGibbs_8_DocsToTopics.csv’ has magic number '"","V'
  Use of save versions prior to 2 is deprecated
Error in load("../output/LDAGibbs_8_DocsToTopics.csv") : 
  bad restore file magic number (file may be corrupted) -- no data loaded
The most popular and salient terms for each topic:
Topic 1 Topic 2 Topic 3 Topic 4 Topic 5 Topic 6 Topic 7 Topic 8
form perfect duti interest price whole polit year
surplus superior europ term quantiti stock question hour
process sovereign home expect land anoth struggl factori
constant exercis compani unit tax maintain movement hous
accumul servic commerc level proport fund bourgeoi half
mode educ wine margin rent want revolutionari children
variabl offic prohibit output rise divid democrat million
labour peopl countri will price can state work
valu law upon interest produc part social time
product even great rate quantiti differ class year
capit govern trade employ money must polit one
commod public good increas profit employ econom day
power everi manufactur wage land one worker hour
form common import money tax whole develop two
mean like part capit will may industri factori

Clustering of topics

[1] "Production"        "Politics"          "Trade"             "Finance & Banking" "Property"         
[6] "Assets"            "Socioeconomics"    "Time"             

Mind and body. Cartesian - duality between mind and body. justice, good, mind. male vs female, feminism - wollstonecraft. naturalism. religion, god. Deontolgy and consequentialsm. location. free will. society vs self. females focused more on society

good harm action

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBpbmNsdWRlID0gRn0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUYsIG1lc3NhZ2U9Riwgd2FybmluZz1GKQ0KYGBgDQoNCg0KYGBge3J9DQpwYWNrYWdlcy51c2VkPWMoInJ2ZXN0IiwgInRpYmJsZSIsIA0KICAgICAgICAgICAgICAgICJzZW50aW1lbnRyIiwgImdwbG90cyIsICJkcGx5ciIsDQogICAgICAgICAgICAgICAgInRtIiwgInN5dXpoZXQiLCAiZmFjdG9leHRyYSIsIA0KICAgICAgICAgICAgICAgICJiZWVzd2FybSIsICJzY2FsZXMiLCAiUkNvbG9yQnJld2VyIiwNCiAgICAgICAgICAgICAgICAiUkFOTiIsICJ0b3BpY21vZGVscyIsICJzdHJpbmdyIiwicGx5ciIsImtuaXRyIikNCiMgY2hlY2sgcGFja2FnZXMgdGhhdCBuZWVkIHRvIGJlIGluc3RhbGxlZC4NCnBhY2thZ2VzLm5lZWRlZD1zZXRkaWZmKHBhY2thZ2VzLnVzZWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0KGluc3RhbGxlZC5wYWNrYWdlcygpWywxXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMudXNlZCkpDQojIGluc3RhbGwgYWRkaXRpb25hbCBwYWNrYWdlcw0KaWYobGVuZ3RoKHBhY2thZ2VzLm5lZWRlZCk+MCl7DQogIGluc3RhbGwucGFja2FnZXMocGFja2FnZXMubmVlZGVkLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQ0KfQ0KIyBsb2FkIHBhY2thZ2VzDQpsaWJyYXJ5KCJydmVzdCIpDQpsaWJyYXJ5KCJ0aWJibGUiKQ0KbGlicmFyeSgic3l1emhldCIpDQpsaWJyYXJ5KCJzZW50aW1lbnRyIikNCmxpYnJhcnkoImdwbG90cyIpDQpsaWJyYXJ5KCJwbHlyIikNCmxpYnJhcnkoImRwbHlyIikNCmxpYnJhcnkoInRtIikNCmxpYnJhcnkoInN5dXpoZXQiKQ0KbGlicmFyeSgiZmFjdG9leHRyYSIpDQpsaWJyYXJ5KCJiZWVzd2FybSIpDQpsaWJyYXJ5KCJzY2FsZXMiKQ0KbGlicmFyeSgiUkNvbG9yQnJld2VyIikNCmxpYnJhcnkoIlJBTk4iKQ0KbGlicmFyeSgidG0iKQ0KbGlicmFyeSgidG9waWNtb2RlbHMiKQ0KbGlicmFyeSgic3RyaW5nciIpDQpsaWJyYXJ5KCJrbml0ciIpDQoNCnNvdXJjZSgiLi4vbGliL3Bsb3RzdGFja2VkLlIiKQ0Kc291cmNlKCIuLi9saWIvc3BlZWNoRnVuY3MuUiIpDQpgYGANCg0KYGBge3J9DQpzZW50ZW5jZS5saXN0IDwtIHJlYWQuY3N2KCIuLi9kYXRhL3BoaWxvc29waHlfZGF0YS5jc3YiKQ0KYGBgDQoNCmBgYHtyfQ0Kc29ydCh1bmlxdWUoc2VudGVuY2UubGlzdCRhdXRob3IpKQ0KDQp1bmlxdWUoc2VudGVuY2UubGlzdCR0aXRsZVtzZW50ZW5jZS5saXN0JGF1dGhvcj09IkthbnQiXSkNCg0KdW5pcXVlKHNlbnRlbmNlLmxpc3RbLGMoJ2F1dGhvcicsJ3NjaG9vbCcpXSlbdW5pcXVlKHNlbnRlbmNlLmxpc3RbLGMoJ2F1dGhvcicsJ3NjaG9vbCcpXSkkc2Nob29sICVpbiUgYygiY29tbXVuaXNtIiwiY2FwaXRhbGlzbSIpLF0NCmBgYA0KDQpgYGB7cn0NCmNvbW1jYXAgPC0gYygiY29tbXVuaXNtIiwiY2FwaXRhbGlzbSIpDQpjb21tY2FwIDwtIGMoImVtcGlyaWNpc20iLCJyYXRpb25hbGlzbSIpDQoNCnNlbnRlbmNlLmxpc3QuY29tbWNhcCA8LSBzZW50ZW5jZS5saXN0ICU+JSBmaWx0ZXIoc2Nob29sICVpbiUgY29tbWNhcCkNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCm15LmFkZC5pbmRleCA8LSBmdW5jdGlvbihkZil7DQogIGRmJHNlbnQuaWQgPC0gMTpucm93KGRmKQ0KICByZXR1cm4oZGYpDQp9DQpzZW50ZW5jZS5saXN0LmNvbW1jYXAgPC0gZGRwbHkoc2VudGVuY2UubGlzdC5jb21tY2FwLC4odGl0bGUpLG15LmFkZC5pbmRleCkNCmBgYA0KDQoNCmBgYHtyfQ0KY29ycHVzLmxpc3Q9c2VudGVuY2UubGlzdC5jb21tY2FwWzI6KG5yb3coc2VudGVuY2UubGlzdC5jb21tY2FwKS0xKSwgXQ0Kc2VudGVuY2UucHJlPXNlbnRlbmNlLmxpc3QuY29tbWNhcCRzZW50ZW5jZV9zdHJbMToobnJvdyhzZW50ZW5jZS5saXN0LmNvbW1jYXApLTIpXQ0Kc2VudGVuY2UucG9zdD1zZW50ZW5jZS5saXN0LmNvbW1jYXAkc2VudGVuY2Vfc3RyWzM6KG5yb3coc2VudGVuY2UubGlzdC5jb21tY2FwKS0xKV0NCmNvcnB1cy5saXN0JHNuaXBldHM9cGFzdGUoc2VudGVuY2UucHJlLCBjb3JwdXMubGlzdCRzZW50ZW5jZV9zdHIsIHNlbnRlbmNlLnBvc3QsIHNlcD0iICIpDQpybS5yb3dzPSgxOm5yb3coY29ycHVzLmxpc3QpKVtjb3JwdXMubGlzdCRzZW50LmlkPT0xXQ0Kcm0ucm93cz1jKHJtLnJvd3MsIHJtLnJvd3MtMSkNCmNvcnB1cy5saXN0PWNvcnB1cy5saXN0Wy1ybS5yb3dzLCBdDQpgYGANCg0KIyMgVGV4dCBtaW5pbmcNCmBgYHtyfQ0KZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKGNvcnB1cy5saXN0JHNuaXBldHMpKQ0KYGBgDQoNCiMjIyBUZXh0IGJhc2ljIHByb2Nlc3NpbmcNCkFkYXB0ZWQgZnJvbSA8aHR0cHM6Ly9laWdodDJsYXRlLndvcmRwcmVzcy5jb20vMjAxNS8wOS8yOS9hLWdlbnRsZS1pbnRyb2R1Y3Rpb24tdG8tdG9waWMtbW9kZWxpbmctdXNpbmctci8+Lg0KDQpgYGB7ciwgd2FybmluZyA9IEYsIG1lc3NhZ2U9Rn0NCnNldC5zZWVkKDEpDQppbmRleCA8LSBzYW1wbGUoMTpucm93KGNvcnB1cy5saXN0KSwgMSkNCg0KcHJpbnQoIlNhbXBsZSBzZW50ZW5jZToiKQ0Kd3JpdGVMaW5lcyhhcy5jaGFyYWN0ZXIoZG9jc1tbaW5kZXhdXSkpDQoNCnByaW50KCJBZnRlciBjb252ZXJ0aW5nIHRvIGxvd2VyIGNhc2U6IikNCiNyZW1vdmUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc3ltYm9scw0KZG9jcyA8LXRtX21hcChkb2NzLGNvbnRlbnRfdHJhbnNmb3JtZXIodG9sb3dlcikpDQp3cml0ZUxpbmVzKGFzLmNoYXJhY3Rlcihkb2NzW1tpbmRleF1dKSkNCg0KcHJpbnQoIkFmdGVyIHJlbW92aW5nIHB1bmN0dWF0aW9uOiIpDQojcmVtb3ZlIHB1bmN0dWF0aW9uDQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVQdW5jdHVhdGlvbikNCndyaXRlTGluZXMoYXMuY2hhcmFjdGVyKGRvY3NbW2luZGV4XV0pKQ0KDQpwcmludCgiQWZ0ZXIgcmVtb3ZpbmcgbnVtYmVyczoiKQ0KI1N0cmlwIGRpZ2l0cw0KZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlTnVtYmVycykNCndyaXRlTGluZXMoYXMuY2hhcmFjdGVyKGRvY3NbW2luZGV4XV0pKQ0KDQpwcmludCgiQWZ0ZXIgcmVtb3Zpbmcgc3RvcHdvcmRzOiIpDQojcmVtb3ZlIHN0b3B3b3Jkcw0KZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQ0Kd3JpdGVMaW5lcyhhcy5jaGFyYWN0ZXIoZG9jc1tbaW5kZXhdXSkpDQoNCnByaW50KCJBZnRlciByZW1vdmluZyB3aGl0ZXNwYWNlOiIpDQojcmVtb3ZlIHdoaXRlc3BhY2UNCmRvY3MgPC0gdG1fbWFwKGRvY3MsIHN0cmlwV2hpdGVzcGFjZSkNCndyaXRlTGluZXMoYXMuY2hhcmFjdGVyKGRvY3NbW2luZGV4XV0pKQ0KDQpwcmludCgiQWZ0ZXIgc3RlbW1pbmc6IikNCiNTdGVtIGRvY3VtZW50DQpkb2NzIDwtIHRtX21hcChkb2NzLHN0ZW1Eb2N1bWVudCkNCndyaXRlTGluZXMoYXMuY2hhcmFjdGVyKGRvY3NbW2luZGV4XV0pKQ0KYGBgDQoNCiMjIyBUb3BpYyBtb2RlbGluZw0KDQpHZW5lcmF0ZSBkb2N1bWVudC10ZXJtIG1hdHJpY2VzLiANCg0KYGBge3IsIGV2YWw9Rn0NCiMgV0FSTklORzogVElNRSBJTlRFTlNJVkUgQ0hVTksuIERPIE5PVCBSVU4gVEhJUyBDSFVOSyBGT1IgRVZBTFVBVElPTg0KIyBUSEUgUkVRVUlSRUQgT1VUUFVUUyBBUkUgU0FWRUQgSU4gT1VUUFVUIEZPTERFUiBGT1IgRUFTWSBBQ0NFU1MuDQoNCmR0bSA8LSBEb2N1bWVudFRlcm1NYXRyaXgoZG9jcykNCiNjb252ZXJ0IHJvd25hbWVzIHRvIGZpbGVuYW1lcyNjb252ZXJ0IHJvd25hbWVzIHRvIGZpbGVuYW1lcw0Kcm93bmFtZXMoZHRtKSA8LSBwYXN0ZShjb3JwdXMubGlzdCRhdXRob3IsIGNvcnB1cy5saXN0JHRpdGxlLA0KICAgICAgICAgICAgICAgICAgICAgICBjb3JwdXMubGlzdCRzZW50LmlkLCBzZXA9Il8iKQ0KDQojRmluZCB0aGUgc3VtIG9mIHdvcmRzIGluIGVhY2ggRG9jdW1lbnQNCnJvd1RvdGFscyA8LSByZXAoTkEsIG5yb3coZHRtKSkNCmZvciAoaSBpbiAxOihucm93KGR0bSklLyU1MDAwKzEpKXsNCiAgDQogIGlmKGkhPShucm93KGR0bSklLyU1MDAwKzEpKXsNCiAgICByb3dUb3RhbHNbKDUwMDAqKGktMSkrMSk6KDUwMDAqaSldIDwtIGFwcGx5KGR0bVsoNTAwMCooaS0xKSsxKTooNTAwMCppKSxdLDEsc3VtKQ0KICB9DQogIGVsc2V7DQogICAgcm93VG90YWxzWyg1MDAwKihpLTEpKzEpOm5yb3coZHRtKV0gPC0gYXBwbHkoZHRtWyg1MDAwKihpLTEpKzEpOm5yb3coZHRtKSxdLDEsc3VtKQ0KICB9DQogIA0KfQ0KDQpkdG0gIDwtIGR0bVtyb3dUb3RhbHM+IDAsIF0NCmNvcnB1cy5saXN0PWNvcnB1cy5saXN0W3Jvd1RvdGFscz4wLCBdDQoNCnNhdmUoZHRtLCBmaWxlID0gIi4uL291dHB1dC9kdG0iKQ0Kc2F2ZShjb3JwdXMubGlzdCwgZmlsZSA9ICIuLi9vdXRwdXQvY29ycHVzLmxpc3QiKQ0KYGBgDQoNCmBgYHtyfQ0KbG9hZCgiLi4vb3V0cHV0L2R0bSIpDQpsb2FkKCIuLi9vdXRwdXQvY29ycHVzLmxpc3QiKQ0KYGBgDQoNCg0KUnVuIExEQQ0KDQpgYGB7ciwgZXZhbD1GfQ0KIyBXQVJOSU5HOiBUSU1FIElOVEVOU0lWRSBDSFVOSy4gRE8gTk9UIFJVTiBUSElTIENIVU5LIEZPUiBFVkFMVUFUSU9ODQojIFRIRSBSRVFVSVJFRCBPVVRQVVRTIEFSRSBTQVZFRCBJTiBPVVRQVVQgRk9MREVSIEZPUiBFQVNZIEFDQ0VTUy4NCg0KI1NldCBwYXJhbWV0ZXJzIGZvciBHaWJicyBzYW1wbGluZw0KYnVybmluIDwtIDQwMDANCml0ZXIgPC0gMjAwMA0KdGhpbiA8LSA1MDANCnNlZWQgPC1saXN0KDIwMDMsNSw2MywxMDAwMDEsNzY1KQ0KbnN0YXJ0IDwtIDUNCmJlc3QgPC0gVFJVRQ0KDQojTnVtYmVyIG9mIHRvcGljcw0KayA8LSA4DQoNCiNSdW4gTERBIHVzaW5nIEdpYmJzIHNhbXBsaW5nDQpsZGFPdXQgPC1MREEoZHRtLCBrLCBtZXRob2Q9IkdpYmJzIiwgY29udHJvbD1saXN0KG5zdGFydD1uc3RhcnQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWQgPSBzZWVkLCBiZXN0PWJlc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVybmluID0gYnVybmluLCBpdGVyID0gaXRlciwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpbj10aGluKSkNCg0Kc2F2ZShsZGFPdXQsIGZpbGUgPSBwYXN0ZSgiLi4vb3V0cHV0L0xEQUdpYmJzIixrLCBzZXA9Il8iKSkNCiN3cml0ZSBvdXQgcmVzdWx0cw0KI2RvY3MgdG8gdG9waWNzDQpsZGFPdXQudG9waWNzIDwtIGFzLm1hdHJpeCh0b3BpY3MobGRhT3V0KSkNCnRhYmxlKGMoMTprLCBsZGFPdXQudG9waWNzKSkNCnNhdmUobGRhT3V0LnRvcGljcyxmaWxlPXBhc3RlKCIuLi9vdXRwdXQvTERBR2liYnMiLGssIkRvY3NUb1RvcGljcyIsIHNlcD0iXyIpKQ0Kd3JpdGUuY3N2KGxkYU91dC50b3BpY3MsZmlsZT1wYXN0ZSgiLi4vb3V0cHV0L0xEQUdpYmJzIixrLCJEb2NzVG9Ub3BpY3MuY3N2Iiwgc2VwPSJfIikpDQoNCiN0b3AgOCB0ZXJtcyBpbiBlYWNoIHRvcGljDQpsZGFPdXQudGVybXMgPC0gYXMubWF0cml4KHRlcm1zKGxkYU91dCw4KSkNCnNhdmUobGRhT3V0LnRlcm1zLGZpbGU9cGFzdGUoIi4uL291dHB1dC9MREFHaWJicyIsaywiVG9waWNzVG9UZXJtcyIsIHNlcD0iXyIpKQ0Kd3JpdGUuY3N2KGxkYU91dC50ZXJtcyxmaWxlPXBhc3RlKCIuLi9vdXRwdXQvTERBR2liYnMiLGssIlRvcGljc1RvVGVybXMuY3N2Iiwgc2VwPSJfIikpDQoNCiNwcm9iYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHRvcGljIGFzc2lnbm1lbnQNCnRvcGljUHJvYmFiaWxpdGllcyA8LSBhcy5kYXRhLmZyYW1lKGxkYU91dEBnYW1tYSkNCnNhdmUodG9waWNQcm9iYWJpbGl0aWVzLGZpbGU9cGFzdGUoIi4uL291dHB1dC9MREFHaWJicyIsaywiVG9waWNQcm9iYWJpbGl0aWVzIiwgc2VwPSJfIikpDQp3cml0ZS5jc3YodG9waWNQcm9iYWJpbGl0aWVzLGZpbGU9cGFzdGUoIi4uL291dHB1dC9MREFHaWJicyIsaywiVG9waWNQcm9iYWJpbGl0aWVzLmNzdiIsIHNlcD0iXyIpKQ0KYGBgDQoNCmBgYHtyfQ0KbG9hZCgiLi4vb3V0cHV0L0xEQUdpYmJzXzhfRG9jc1RvVG9waWNzIikNCmxvYWQoIi4uL291dHB1dC9MREFHaWJic184X1RvcGljc1RvVGVybXMiKQ0KbG9hZCgiLi4vb3V0cHV0L0xEQUdpYmJzXzhfVG9waWNQcm9iYWJpbGl0aWVzIikNCmBgYA0KDQpgYGB7cn0NCnRlcm1zLmJldGE9bGRhT3V0QGJldGENCnRlcm1zLmJldGE9c2NhbGUodGVybXMuYmV0YSkNCnRvcGljcy50ZXJtcz1OVUxMDQpmb3IoaSBpbiAxOmspew0KICB0b3BpY3MudGVybXM9cmJpbmQodG9waWNzLnRlcm1zLCBsZGFPdXRAdGVybXNbb3JkZXIodGVybXMuYmV0YVtpLF0sIGRlY3JlYXNpbmcgPSBUUlVFKVsxOjddXSkNCn0NCiN0KHRvcGljcy50ZXJtcykNCiNsZGFPdXQudGVybXMNCg0KY2F0KCJUaGUgbW9zdCBwb3B1bGFyIGFuZCBzYWxpZW50IHRlcm1zIGZvciBlYWNoIHRvcGljOlxuXG4iKQ0Ka2FibGUocmJpbmQodCh0b3BpY3MudGVybXMpLGxkYU91dC50ZXJtcyksIGZvcm1hdD0ic2ltcGxlIiwgbGFiZWw9ICJUaGUgbW9zdCBwb3B1bGFyIGFuZCBzYWxpZW50IHRlcm1zIGZvciBlYWNoIHRvcGljIikNCmBgYA0KDQpgYGB7cn0NCnRvcGljcy5oYXNoPWMoIlByb2R1Y3Rpb24iLCJQb2xpdGljcyIsIlRyYWRlIiwiRmluYW5jZSAmIEJhbmtpbmciLCJQcm9wZXJ0eSIsIkFzc2V0cyIsIlNvY2lvZWNvbm9taWNzIiwiVGltZSIpDQpjb3JwdXMubGlzdCRsZGF0b3BpYz1hcy52ZWN0b3IobGRhT3V0LnRvcGljcykNCmNvcnB1cy5saXN0JGxkYWhhc2g9dG9waWNzLmhhc2hbbGRhT3V0LnRvcGljc10NCg0KY29sbmFtZXModG9waWNQcm9iYWJpbGl0aWVzKT10b3BpY3MuaGFzaA0KY29ycHVzLmxpc3QuZGY9Y2JpbmQoY29ycHVzLmxpc3QsIHRvcGljUHJvYmFiaWxpdGllcykNCmBgYA0KDQojIyBDbHVzdGVyaW5nIG9mIHRvcGljcw0KYGBge3IsIGZpZy53aWR0aD04LCBmaWcuaGVpZ2h0PTR9DQpwYXIobWFyPWMoNS4xLCA0LjEsIDQuMSwgMi4xKSkNCnRvcGljLnN1bW1hcnk9dGJsX2RmKGNvcnB1cy5saXN0LmRmKSU+JQ0KICAgICAgICAgICAgICBzZWxlY3QoYXV0aG9yLCBQcm9kdWN0aW9uOlRpbWUpJT4lDQogICAgICAgICAgICAgIGdyb3VwX2J5KGF1dGhvciklPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlX2VhY2goZnVucyhtZWFuKSkNCnRvcGljLnN1bW1hcnk9YXMuZGF0YS5mcmFtZSh0b3BpYy5zdW1tYXJ5KQ0Kcm93bmFtZXModG9waWMuc3VtbWFyeSk9dG9waWMuc3VtbWFyeVssMV0NCnRvcGljLnN1bW1hcnkgPC0gdG9waWMuc3VtbWFyeVtjKCJNYXJ4IiwiTGVuaW4iLCJLZXluZXMiLCJTbWl0aCIsIlJpY2FyZG8iKSxdDQoNCiMgWzFdICJQcm9kdWN0aW9uIiAgICAgICAgIlBvbGl0aWNzIiAgICAgICAgICAiVHJhZGUiICAgICAgICAgICAgICJGaW5hbmNlICYgQmFua2luZyIgIlByb3BlcnR5IiAgICAgICAgIA0KIyBbNl0gIkFzc2V0cyIgICAgICAgICAgICAiU29jaW9lY29ub21pY3MiICAgICJUaW1lIiAgICAgDQoNCiMgNiwgNywgNSwgMQ0KDQp0b3BpYy5wbG90PWMoMTo4KQ0KI3ByaW50KHRvcGljcy5oYXNoW3RvcGljLnBsb3RdKQ0KI3RvcGljLnN1bW1hcnkNCmhlYXRtYXAuMihhcy5tYXRyaXgodG9waWMuc3VtbWFyeVssdG9waWMucGxvdCsxXSksIA0KICAgICAgICAgIHNjYWxlID0gImNvbHVtbiIsIGtleT1GLCANCiAgICAgICAgICBjb2wgPSBibHVlcmVkKDEwMCksDQogICAgICAgICAgY2V4Um93ID0gMSwgY2V4Q29sID0gMSwgbWFyZ2lucyA9IGMoNCwgNCksDQogICAgICAgICAgdHJhY2UgPSAibm9uZSIsIGRlbnNpdHkuaW5mbyA9ICJub25lIiwNCiAgICAgICAgICBtYWluID0gIkhlYXRtYXAgb2YgVG9waWNzIGJ5IEF1dGhvciIpDQpgYGANCmBgYHtyLCBmaWcud2lkdGg9My4zLCBmaWcuaGVpZ2h0PTUsIGV2YWwgPSBGfQ0KIyBbMV0gIlByb2R1Y3Rpb24iICAgICAgICAiUG9saXRpY3MiICAgICAgICAgICJUcmFkZSIgICAgICAgICAgICAgIkZpbmFuY2UgJiBCYW5raW5nIiAiUHJvcGVydHkiICAgICAgICAgDQojIFs2XSAiQXNzZXRzIiAgICAgICAgICAgICJTb2Npb2Vjb25vbWljcyIgICAgIlRpbWUiICAgICANCiANCg0KcGFyKG1mcm93PWMoNSwgMSksIG1hcj1jKDEsMSwyLDApLCBidHk9Im4iLCB4YXh0PSJuIiwgeWF4dD0ibiIpDQoNCnRvcGljLnBsb3Q9Yyg2LCA3LCA1LCAxKQ0KcHJpbnQodG9waWNzLmhhc2hbdG9waWMucGxvdF0pDQoNCnNwZWVjaC5kZj10YmxfZGYoY29ycHVzLmxpc3QuZGYpJT4lZmlsdGVyKGF1dGhvcj09Ik1hcngiLCB0aXRsZSA9PSAiVGhlIENvbW11bmlzdCBNYW5pZmVzdG8iKSU+JXNlbGVjdChzZW50LmlkLCBQcm9kdWN0aW9uOlRpbWUpDQpzcGVlY2guZGY9YXMubWF0cml4KHNwZWVjaC5kZikNCnNwZWVjaC5kZlssLTFdPXJlcGxhY2Uoc3BlZWNoLmRmWywtMV0sIHNwZWVjaC5kZlssLTFdPDEvMTUsIDAuMDAxKQ0Kc3BlZWNoLmRmWywtMV09Zi5zbW9vdGgudG9waWMoeD1zcGVlY2guZGZbLDFdLCB5PXNwZWVjaC5kZlssLTFdKQ0KcGxvdC5zdGFja2VkKHNwZWVjaC5kZlssMV0sIHNwZWVjaC5kZlssdG9waWMucGxvdCsxXSwgDQogICAgICAgICAgICAgeGxhYj0iU2VudGVuY2VzIiwgeWxhYj0iVG9waWMgc2hhcmUiLCBtYWluPSJUaGUgQ29tbXVuaXN0IE1hbmlmZXN0bywgS2FybCBNYXJ4IikNCg0Kc3BlZWNoLmRmPXRibF9kZihjb3JwdXMubGlzdC5kZiklPiVmaWx0ZXIoRmlsZT09IldpbGxpYW1KQ2xpbnRvbiIsIHR5cGU9PSJub21pbiIsIFRlcm09PTEpJT4lc2VsZWN0KHNlbnQuaWQsIEVjb25vbXk6TGVnaXNsYXRpb24pDQpzcGVlY2guZGY9YXMubWF0cml4KHNwZWVjaC5kZikNCnNwZWVjaC5kZlssLTFdPXJlcGxhY2Uoc3BlZWNoLmRmWywtMV0sIHNwZWVjaC5kZlssLTFdPDEvMTUsIDAuMDAxKQ0Kc3BlZWNoLmRmWywtMV09Zi5zbW9vdGgudG9waWMoeD1zcGVlY2guZGZbLDFdLCB5PXNwZWVjaC5kZlssLTFdKQ0KcGxvdC5zdGFja2VkKHNwZWVjaC5kZlssMV0sIHNwZWVjaC5kZlssdG9waWMucGxvdCsxXSwNCiAgICAgICAgICAgIHhsYWI9IlNlbnRlbmNlcyIsIHlsYWI9IlRvcGljIHNoYXJlIiwgbWFpbj0iQmlsbCBDbGludG9uLCBOb21pbmF0aW9uIikNCg0Kc3BlZWNoLmRmPXRibF9kZihjb3JwdXMubGlzdC5kZiklPiVmaWx0ZXIoRmlsZT09Ikdlb3JnZVdCdXNoIiwgdHlwZT09Im5vbWluIiwgVGVybT09MSklPiVzZWxlY3Qoc2VudC5pZCwgRWNvbm9teTpMZWdpc2xhdGlvbikNCnNwZWVjaC5kZj1hcy5tYXRyaXgoc3BlZWNoLmRmKQ0Kc3BlZWNoLmRmWywtMV09cmVwbGFjZShzcGVlY2guZGZbLC0xXSwgc3BlZWNoLmRmWywtMV08MS8xNSwgMC4wMDEpDQpzcGVlY2guZGZbLC0xXT1mLnNtb290aC50b3BpYyh4PXNwZWVjaC5kZlssMV0sIHk9c3BlZWNoLmRmWywtMV0pDQpwbG90LnN0YWNrZWQoc3BlZWNoLmRmWywxXSwgc3BlZWNoLmRmWyx0b3BpYy5wbG90KzFdLCANCiAgICAgICAgICAgIHhsYWI9IlNlbnRlbmNlcyIsIHlsYWI9IlRvcGljIHNoYXJlIiwgbWFpbj0iR2VvcmdlIFcgQnVzaCwgTm9taW5hdGlvbiIpDQoNCnNwZWVjaC5kZj10YmxfZGYoY29ycHVzLmxpc3QuZGYpJT4lZmlsdGVyKEZpbGU9PSJCYXJhY2tPYmFtYSIsIHR5cGU9PSJub21pbiIsIFRlcm09PTEpJT4lc2VsZWN0KHNlbnQuaWQsIEVjb25vbXk6TGVnaXNsYXRpb24pDQpzcGVlY2guZGY9YXMubWF0cml4KHNwZWVjaC5kZikNCnNwZWVjaC5kZlssLTFdPXJlcGxhY2Uoc3BlZWNoLmRmWywtMV0sIHNwZWVjaC5kZlssLTFdPDEvMTUsIDAuMDAxKQ0Kc3BlZWNoLmRmWywtMV09Zi5zbW9vdGgudG9waWMoeD1zcGVlY2guZGZbLDFdLCB5PXNwZWVjaC5kZlssLTFdKQ0KcGxvdC5zdGFja2VkKHNwZWVjaC5kZlssMV0sIHNwZWVjaC5kZlssdG9waWMucGxvdCsxXSwNCiAgICAgICAgICAgIHhsYWI9IlNlbnRlbmNlcyIsIHlsYWI9IlRvcGljIHNoYXJlIiwgbWFpbj0iQmFyYWNrIE9iYW1hLCBOb21pbmF0aW9uIikNCg0Kc3BlZWNoLmRmPXRibF9kZihjb3JwdXMubGlzdC5kZiklPiVmaWx0ZXIoRmlsZT09IkRvbmFsZEpUcnVtcCIsIHR5cGU9PSJub21pbiIpJT4lc2VsZWN0KHNlbnQuaWQsIEVjb25vbXk6TGVnaXNsYXRpb24pDQpzcGVlY2guZGY9YXMubWF0cml4KHNwZWVjaC5kZikNCnNwZWVjaC5kZlssLTFdPXJlcGxhY2Uoc3BlZWNoLmRmWywtMV0sIHNwZWVjaC5kZlssLTFdPDEvMTUsIDAuMDAxKQ0Kc3BlZWNoLmRmWywtMV09Zi5zbW9vdGgudG9waWMoeD1zcGVlY2guZGZbLDFdLCB5PXNwZWVjaC5kZlssLTFdKQ0KcGxvdC5zdGFja2VkKHNwZWVjaC5kZlssMV0sIHNwZWVjaC5kZlssdG9waWMucGxvdCsxXSwNCiAgICAgICAgICAgIHhsYWI9IlNlbnRlbmNlcyIsIHlsYWI9IlRvcGljIHNoYXJlIiwgbWFpbj0iRG9uYWxkIFRydW1wLCBOb21pbmF0aW9uIikNCmBgYA0KDQoNCk1pbmQgYW5kIGJvZHkuIENhcnRlc2lhbiAtIGR1YWxpdHkgYmV0d2VlbiBtaW5kIGFuZCBib2R5LiBqdXN0aWNlLCBnb29kLCBtaW5kLiBtYWxlIHZzIGZlbWFsZSwgZmVtaW5pc20gLSB3b2xsc3RvbmVjcmFmdC4gbmF0dXJhbGlzbS4gcmVsaWdpb24sIGdvZC4gRGVvbnRvbGd5IGFuZCBjb25zZXF1ZW50aWFsc20uIGxvY2F0aW9uLiBmcmVlIHdpbGwuIHNvY2lldHkgdnMgc2VsZi4gZmVtYWxlcyBmb2N1c2VkIG1vcmUgb24gc29jaWV0eQ0KDQpnb29kDQpoYXJtDQphY3Rpb24=